/**
 * 头部处理器
 * 负责管理头部组件的业务逻辑，包括用户ID生成和同步
 */
class HeaderHandlers {
  constructor() {
    this.userId = null;
    this.appHeader = null;
    this.messageHandlers = null;
  }
  /**
   * 初始化头部处理器
   */
  async init(appHeader, messageHandlers = null) {
    this.appHeader = appHeader;
    this.messageHandlers = messageHandlers;
    
    // 生成或获取用户ID
    this.userId = this.generateOrGetUserId();
    
    // 同步用户ID到相关组件
    this.syncUserIdToComponents();
    
    // 通过IPC将用户ID同步到主进程
    this.syncUserIdToMainProcess();
    
    console.log('HeaderHandlers初始化完成，用户ID:', this.userId);
  }

  /**
   * 生成或获取用户ID
   * 优先从本地存储获取，如果不存在则生成新的
   */
  generateOrGetUserId() {
    // 尝试从本地存储获取现有的用户ID
    let existingUserId = localStorage.getItem('chatAppUserId');
    
    if (existingUserId && this.isValidUserId(existingUserId)) {
      console.log('从本地存储获取用户ID:', existingUserId);
      return existingUserId;
    }
    
    // 生成新的用户ID
    const newUserId = this.createNewUserId();
    
    // 保存到本地存储
    localStorage.setItem('chatAppUserId', newUserId);
    console.log('生成新用户ID:', newUserId);
    
    return newUserId;
  }

  /**
   * 创建新的用户ID
   * 格式: user_YYYYMMDD_HHMMSS_随机数
   */
  createNewUserId() {
    const now = new Date();
    const dateStr = now.getFullYear().toString() + 
                   (now.getMonth() + 1).toString().padStart(2, '0') + 
                   now.getDate().toString().padStart(2, '0');
    const timeStr = now.getHours().toString().padStart(2, '0') + 
                   now.getMinutes().toString().padStart(2, '0') + 
                   now.getSeconds().toString().padStart(2, '0');
    const randomStr = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
    
    return `user_${dateStr}_${timeStr}_${randomStr}`;
  }

  /**
   * 验证用户ID是否有效
   */
  isValidUserId(userId) {
    if (!userId || typeof userId !== 'string') {
      return false;
    }
    
    // 检查用户ID格式 (至少包含字母数字和下划线，长度在5-50之间)
    const userIdPattern = /^[a-zA-Z0-9_-]{5,50}$/;
    return userIdPattern.test(userId);
  }

  /**
   * 同步用户ID到相关组件
   */
  syncUserIdToComponents() {
    // 同步到app-header组件
    if (this.appHeader && typeof this.appHeader.setUserId === 'function') {
      this.appHeader.setUserId(this.userId);
      console.log('用户ID已同步到AppHeader');
    }
    
    // 同步到message-handlers组件（渲染进程中的组件，如果存在的话）
    if (this.messageHandlers && typeof this.messageHandlers.setUserId === 'function') {
      this.messageHandlers.setUserId(this.userId);
      console.log('用户ID已同步到MessageHandlers');
    }
  }

  /**
   * 通过IPC将用户ID同步到主进程
   */
  syncUserIdToMainProcess() {
    if (window.electronAPI && window.electronAPI.setUserId) {
      window.electronAPI.setUserId(this.userId);
      console.log('用户ID已通过IPC发送到主进程');
    } else {
      console.warn('electronAPI不可用，无法同步用户ID到主进程');
    }
  }
  /**
   * 重新生成用户ID
   * 用于用户主动重置身份的场景
   */
  regenerateUserId() {
    // 清除本地存储的旧ID
    localStorage.removeItem('chatAppUserId');
    
    // 生成新的用户ID
    this.userId = this.generateOrGetUserId();
    
    // 重新同步到组件
    this.syncUserIdToComponents();
    
    // 同步到主进程
    this.syncUserIdToMainProcess();
    
    // 触发用户ID变更事件
    this.dispatchUserIdChangeEvent();
    
    console.log('用户ID已重新生成:', this.userId);
    return this.userId;
  }

  /**
   * 设置自定义用户ID
   */
  setCustomUserId(customUserId) {
    if (!this.isValidUserId(customUserId)) {
      throw new Error('无效的用户ID格式');
    }
    
    this.userId = customUserId;
    
    // 保存到本地存储
    localStorage.setItem('chatAppUserId', this.userId);
    
    // 同步到组件
    this.syncUserIdToComponents();
    
    // 同步到主进程
    this.syncUserIdToMainProcess();
    
    // 触发用户ID变更事件
    this.dispatchUserIdChangeEvent();
    
    console.log('自定义用户ID已设置:', this.userId);
    return this.userId;
  }

  /**
   * 获取当前用户ID
   */
  getUserId() {
    return this.userId;
  }

  /**
   * 触发用户ID变更事件
   */
  dispatchUserIdChangeEvent() {
    document.dispatchEvent(new CustomEvent('userIdChanged', {
      detail: { 
        userId: this.userId,
        timestamp: new Date().toISOString()
      }
    }));
  }

  /**
   * 获取用户信息摘要
   */
  getUserInfo() {
    return {
      userId: this.userId,
      createdAt: localStorage.getItem('chatAppUserId_createdAt') || 'unknown',
      lastUsed: new Date().toISOString()
    };
  }

  /**
   * 清除用户数据
   * 用于用户注销或重置的场景
   */
  clearUserData() {
    // 清除本地存储的用户相关数据
    const keysToRemove = [
      'chatAppUserId',
      'chatAppUserId_createdAt',
      'chatAppTheme' // 可选：是否清除主题设置
    ];
    
    keysToRemove.forEach(key => {
      localStorage.removeItem(key);
    });
    
    this.userId = null;
    
    console.log('用户数据已清除');
    
    // 触发用户数据清除事件
    document.dispatchEvent(new CustomEvent('userDataCleared', {
      detail: { timestamp: new Date().toISOString() }
    }));
  }

  /**
   * 设置MessageHandlers实例
   */
  setMessageHandlers(messageHandlers) {
    this.messageHandlers = messageHandlers;
    
    // 如果已有用户ID，立即同步
    if (this.userId) {
      this.syncUserIdToComponents();
    }
  }
}

// 导出类供其他模块使用
window.HeaderHandlers = HeaderHandlers;
